home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 20 / Cream of the Crop 20 (Terry Blount) (1996).iso / os2 / ppdial29.zip / pppdial.cmd < prev    next >
OS/2 REXX Batch file  |  1996-07-13  |  32KB  |  936 lines

  1. /* REXX */
  2. /*
  3.      OS/2 WARP REXX script to redial a PPP provider when busy.
  4.  
  5.       Written by: Don Russell (c) 1995, 1996
  6.       send email to don_russell@ibm.net
  7.  
  8.       Many changes introduced by Ed Tomlinson in version 2.4
  9.       send email to tomlins@CAM.ORG
  10.  
  11. Change log: (most recent first)
  12.      13 July 1996 Version: 2.9
  13.              Improve error checking when examining ini files.
  14.  
  15.    (other history removed, see documentation if interested)
  16.    8 April 1995: Original
  17. stop
  18. A note about distribution.... This script may be distributed freely provided
  19. I am given credit for it. Please do not alter my name or email address
  20. nor the manner in which they are displayed.
  21.  
  22. If you have comments regarding this script, plese let me know by email. I'll
  23. support it as time, and my ability permit.   ;-)
  24.  
  25. NOTE: I've tested this as well as I can with a single provider. Given the many
  26. providers and configurations, this may not work properly the first time.
  27.  
  28. If you have problems with pppdial, please refer to the pppdial.htm file.
  29.  
  30. Specific things to watch for are the EXACT prompts used when the host
  31. system is asking for a userid and password. The prompts that pppdial expect
  32. are "ogin:" (no quotes) and "ssword:" (no quotes) for userid and password
  33. respectfully.
  34.  
  35. If your system uses someting different, you will need to use the response file
  36. option. (Or modify the script slightly. This is not recommended because you will
  37. have to make the same changes in the next version etc. too.)
  38.  
  39. -----------------------------------------------------------------*/
  40. VersionTag = 'PPPDIAL V2.9'
  41.  
  42. RFile = ''
  43. UsePhoneNumberFile = 0
  44. signal on halt
  45.  
  46. LoginPrompt = 'ogin:'
  47. PasswordPrompt = 'ssword:'
  48.  
  49. LoginId = 'userid'
  50. Password = 'password'
  51.  
  52. call rxFuncAdd 'SysLoadFuncs', 'RexxUtil', 'SysLoadFuncs'
  53. call SysLoadFuncs
  54.  
  55. parse upper source . . MyDrivePathName
  56. etcDrivePath = translate( value( 'etc',,'OS2ENVIRONMENT') )
  57. iniFile = etcDrivePath || '\TCPOS2.INI'
  58.  
  59. /* before we get too carried away, let's see what we're doing... */
  60. /* if the ppp_ functions are registered, I assume we're about to */
  61. /* start a ppp connection... */
  62. /* If neither the ppp_ functions NOR the slip_ functions are registered */
  63. /* then I assume we're installing ... */
  64.  
  65. PPPService = ( RxFuncQuery( 'ppp_com_input' ) = 0 )
  66. SLIPService = ( RxFuncQuery( 'slip_com_input' ) = 0 )
  67. if \(PPPService | SLIPService) then do
  68.    call NotFromDialer
  69.    exit 0
  70. end  /* Do */
  71.  
  72. /* Set some definitions for easier COM strings */
  73. bs = '08'x
  74. cr='0d'x
  75. crlf='0d0a'x
  76.  
  77. if PPPService then
  78.    parse arg interface , port , . , RFile
  79. else
  80.    parse arg interface , RFile               /* different when slip :-( */
  81.  
  82. if RFile \= '' then do
  83.    /* The use of slippm.exe is a bit tricky... extra <CR> cause havoc :-( */
  84.    /* Check to see if there are any in the spec and warn the user. */
  85.    if pos(cr, RFile) \= 0 then do
  86.       call lineout , 'Response file is not coded correctly.'
  87.       call lineout , 'Do not press the enter key when typing the response file name'
  88.       call lineout , 'in the login sequence field in slippm.exe'
  89.       exit 8
  90.    end  /* Do */
  91.  
  92.    RFile = stream( RFile, 'C', 'QUERY EXISTS' )
  93.    if RFile = '' then do
  94.       if substr(Rfile, 2, 1) \= ':' then do
  95.             call lineout , 'Response file must have drive and path information'
  96.             call lineout , 'or the working directory path of the dialer must be set.'
  97.             exit 8
  98.          end  /* Do */
  99.       else  do
  100.             call lineout , 'Response file not found.'
  101.             call lineout , 'Processing ended.'
  102.             exit 8
  103.          end
  104.    end  /* Do */
  105. end  /* Do */
  106.  
  107. /*--------------------------------------------------------------------------*/
  108. /*                   Initialization and Main Script Code                    */
  109. /*--------------------------------------------------------------------------*/
  110.  
  111. remain_buffer = ''
  112.  
  113. UsePhoneNumberFile = 0
  114. UsePhoneNumberList = 0
  115. Disable = 0
  116. ActualCarrier = 0     /* to be determined .... */
  117.  
  118. UpperCase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
  119. LowerCase = 'abcdefghijklmnopqrstuvwxyz'
  120.  
  121. /* initialize variables that MAY be set by a response file... */
  122. BeepWanted = 1        /* beep when successful connection */
  123. DialPrefix = ''
  124. HostTimeout = 60
  125. init1 = ''
  126. init2 = ''
  127. MaxAttempts = 32767
  128. MinCarrier = 0
  129. ModemEscapeSequence = '+++'
  130. ModemRegS7 = -1   /* if still < 0 later, we get it from the modem */
  131. ModemResetCommand = 'ATH0Z'
  132. pause = 5             /* seconds between dial attempts */
  133. PhoneNumber = 'xxx-xxxx'   /* may be a blank delimited list, or file name */
  134. prefix = 'ATDT'            /* add any other commands required */
  135. UseDialer = 1    /* yes, we're using the IBM "Dial Other..." */
  136. AutoStart = ''
  137.  
  138. if UseDialer then do
  139.     /* Get userid/password etc. from the dialer */
  140.     ConnectTo = strip( SysIni( iniFile, 'CONNECTION', 'CURRENT_CONNECTION' ), 'T', '00'x )
  141.     if (ConnectTo = '') | (ConnectTo = 'ERROR:') then do
  142.        ConnectTo = strip( SysIni( iniFile, 'CONNECTION', 'LAST_CONNECTION' ), 'T', '00'x )
  143.     end /* Do */
  144.     x = Strip( SysIni( iniFile, ConnectTo, 'INIT' ), 'T', '00'x )
  145.     if x <> 'ERROR:' then init1 = x
  146.     x = Strip( SysIni( iniFile, ConnectTo, 'INIT2' ), 'T', '00'x )
  147.     if x <> 'ERROR:' then init2 = x
  148.     x = Strip( SysIni( iniFile, ConnectTo, 'AUTOSTART'), 'T', '00'x );
  149.     if x <> 'ERROR:' then AutoStart = x
  150.     x = Strip( SysIni( iniFile, ConnectTo, 'PREFIX' ), 'T', '00'x )
  151.     if x <> 'ERROR:' then Prefix = x
  152.     x = Strip( SysIni( iniFile, ConnectTo, 'DIAL_PREFIX' ), 'T', '00'x )
  153.     if x <> 'ERROR:' then DialPrefix = x
  154.     x = Strip( SysIni( iniFile, ConnectTo, 'PHONE_NUMBER' ), 'T', '00'x )
  155.     if x <> 'ERROR:' then PhoneNumber = x
  156.     x = Strip( SysIni( iniFile, ConnectTo, 'LOGIN_ID' ), 'T', '00'x )
  157.     if x <> 'ERROR:' then LoginId = x
  158.     x = Strip( SysIni( iniFile, ConnectTo, 'PWD' ), 'T', '00'x )
  159.     if x <> 'ERROR:' then Password = x
  160.     x = Strip( SysIni( iniFile, ConnectTo, 'DISABLE' ), 'T', '00'x )
  161.     if x <> 'ERROR:' then Disable = ( x = 'TRUE' )
  162.     x = Strip( SysIni( iniFile, ConnectTo, 'DISABLE_SEQUENCE' ), 'T', '00'x )
  163.     if x <> 'ERROR:' then DisableSequence = x
  164.     if (PPPService & SLIPService) then do
  165.        x = Strip( SysIni( iniFile, ConnectTo, 'SERVICE' ), 'T', '00'x )
  166.        if x <> 'ERROR:' then PPPService = ( x = 'PPP' )
  167.     end
  168.     drop x
  169. end /* Do */
  170.  
  171. if RFile \= '' then do
  172.    if \ProcessRFileCommands() then do
  173.       say 'Processing ended due to response file error.'
  174.       exit 8
  175.    end  /* Do */
  176.  
  177.    if (( RFile.1 \= 'GO') & (RFile.1 \= 'WAIT' )) then do
  178.       call lineout , 'First line of response file must be GO or WAIT.'
  179.       call lineout , 'Processing ended.'
  180.       exit 8
  181.    end /* Do */
  182.  
  183. end
  184. else do
  185.    RFile.0 = 0
  186. end  /* Do */
  187.  
  188. if \datatype( pause, 'W' ) then do
  189.    call lineout , 'invalid time delay specified - 5 sec assumed'
  190.    pause = 5
  191. end  /* Do */
  192.  
  193. pause = max( 2, pause )  /* A minimum delay of 2 seconds is required to guarantee dial tone */
  194.  
  195. /* The "phone number" may be a list of numbers, or a file spec of a list of numbers. */
  196. if words( PhoneNumber ) > 1 then do
  197.    /* Yup, it's a list itself... build a stem of numbers to use */
  198.    /* However, it could be a list of "number/pause" pairs... */
  199.    x = 0
  200.    do i = 1 to words( PhoneNumber )
  201.       x = x + 1
  202.  
  203.       PhoneNo.i = word( PhoneNumber, x )
  204.       if right( PhoneNo.i, 1 ) = ';' then do
  205.          if x >= words( PhoneNumber) then do
  206.              call lineout , 'Do not include semicolon on last number dialed'
  207.              exit 8
  208.          end  /* Do */
  209.          PhoneNo.i = PhoneNo.i word( PhoneNumber, x + 1 )
  210.          x = x + 1
  211.       end /* Do */
  212.    end /* do */
  213.    PhoneNo.0 = i - 1
  214.    UsePhoneNumberList = 1
  215.    end  /* Do */
  216. else do
  217.    PhoneNumberFile = stream( PhoneNumber, 'C', 'QUERY EXISTS' )
  218.    if PhoneNumberFile \= '' then do
  219.       /* The phone numbers are in a file. Build a stem variable and close the file */
  220.       UsePhoneNumberFile = 1
  221.       do i = 1 by 1 while lines( PhoneNumberFile )
  222.          PhoneNo.i = linein( PhoneNum